﻿/***************************************************************
 * 开发人员：网魂小兵@http://www.mozlite.com
 * 
 * 网站路由管理。
 * 
 * 最后修改：2011-10-28
 * ************************************************************/
namespace Mozlite.Common
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Mozlite.Common.Configuration;
    using System.Web.Routing;
    using System.Text.RegularExpressions;

    /// <summary>
    /// 网站路由管理。
    /// </summary>
    public class Routes
    {
        private Routes() { }

        private static readonly string routeCacheKey = "Mozlite.Common.AllRoutes";
        /// <summary>
        /// 添加或更新网站路由实例对象。
        /// </summary>
        /// <param name="route">路由实例对象。</param>
        /// <returns>返回更新结果。</returns>
        public static bool SaveRoute(Route route)
        {
            if (string.IsNullOrEmpty(route.AreaName))
                route.AreaName = NullArea;
            if (ConfigurationDataProvider.Current.SaveRoute(route))
            {
                Caches.Remove(routeCacheKey);
                return true;
            }
            return false;
        }

        /// <summary>
        /// 获取网站路由实例对象。
        /// </summary>
        /// <param name="routeID">路由ID。</param>
        /// <returns>返回网站路由实例对象。</returns>
        public static Route GetRoute(int routeID)
        {
            return ConfigurationDataProvider.Current.GetRoute(routeID);
        }

        /// <summary>
        /// 删除网站路由。
        /// </summary>
        /// <param name="routeIDs">网站路由ID集合，以“,”分割。</param>
        /// <returns>返回删除结果。</returns>
        public static bool DeleteRoutes(string routeIDs)
        {
            if (ConfigurationDataProvider.Current.DeleteRoutes(routeIDs))
            {
                Caches.Remove(routeCacheKey);
                return true;
            }
            return false;
        }

        /// <summary>
        /// 载入网站路由列表。
        /// 第一主键：区域字符串。
        /// 第二主键：路由名称字符串。
        /// </summary>
        /// <returns>返回网站路由列表。</returns>
        public static Dictionary<string, Dictionary<string, Route>> LoadRoutes()
        {
            return Caches.Get<Dictionary<string, Dictionary<string, Route>>>(routeCacheKey, Globals.MinuteSeconds * 3, Globals.MinuteSeconds * 3, () =>
            {
                return ConfigurationDataProvider.Current.LoadRoutes();
            });
        }

        /// <summary>
        /// 获取控制面板区域名称。
        /// </summary>
        public const string ControlPanel = "ControlPanel";
        /// <summary>
        /// 获取用户中心区域名称。
        /// </summary>
        public const string UCenter = "UCenter";
        /// <summary>
        /// 空区域名称。
        /// </summary>
        public const string NullArea = "Common";
        /// <summary>
        /// 论坛区域名称。
        /// </summary>
        public const string ForumsArea = "Forums";
    }
}
